home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / g / gnu_c / gempp19.zoo / gem++19 / src / rsc_gobj.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-01  |  3.0 KB  |  65 lines

  1. #include <stddef.h>
  2. #include <aesbind.h>
  3.  
  4. void* rsc_gobj(RSHDR *rsc, long offset, int re_gtype, int re_gindex)
  5. {
  6.     switch (re_gtype) {
  7.      case R_TREE:
  8.         if (re_gindex >= 0 && re_gindex < rsc->rsh_ntree)
  9.             return ((OBJECT**)(rsc->rsh_trindex + offset))[re_gindex];
  10.     break; case R_OBJECT:
  11.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nobs)
  12.             return (OBJECT*)(rsc->rsh_object + offset + sizeof(OBJECT)*re_gindex);
  13.     break; case R_TEDINFO:
  14.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nted)
  15.             return (TEDINFO*)(rsc->rsh_tedinfo + offset + sizeof(TEDINFO)*re_gindex);
  16.     break; case R_ICONBLK:
  17.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nib)
  18.             return (ICONBLK*)(rsc->rsh_iconblk + offset + 34UL*re_gindex); /* 34 = (sizeof(ICONBLK)-2) (no rsrvd field!) */
  19.     break; case R_BITBLK:
  20.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nbb)
  21.             return (BITBLK*)(rsc->rsh_bitblk + offset + sizeof(BITBLK)*re_gindex);
  22.     break; case R_IMAGEDATA:
  23.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nimages)
  24.             return (char*)(rsc->rsh_imdata + offset + sizeof(void*)*re_gindex);
  25.     break; case R_OBSPEC:
  26.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nobs)
  27.             return (void*)((OBJECT*)(rsc->rsh_object + offset + sizeof(OBJECT)*re_gindex))->ob_spec;
  28.     break; case R_TEPTEXT:
  29.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nted)
  30.             return ((TEDINFO*)(rsc->rsh_tedinfo + offset + sizeof(TEDINFO)*re_gindex))->te_ptext;
  31.     break; case R_TEPTMPLT:
  32.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nted)
  33.             return ((TEDINFO*)(rsc->rsh_tedinfo + offset + sizeof(TEDINFO)*re_gindex))->te_ptmplt;
  34.     break; case R_TEPVALID:
  35.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nted)
  36.             return ((TEDINFO*)(rsc->rsh_tedinfo + offset + sizeof(TEDINFO)*re_gindex))->te_pvalid;
  37.     break; case R_IBPMASK:
  38.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nib)
  39.             return ((ICONBLK*)(rsc->rsh_iconblk + offset + 34UL*re_gindex))->ib_pmask; /* 34 = (sizeof(ICONBLK)-2) */
  40.     break; case R_IBPDATA:
  41.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nib)
  42.             return ((ICONBLK*)(rsc->rsh_iconblk + offset + 34UL*re_gindex))->ib_pdata; /* 34 = (sizeof(ICONBLK)-2) */
  43.     break; case R_IBPTEXT:
  44.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nib)
  45.             return ((ICONBLK*)(rsc->rsh_iconblk + offset + 34UL*re_gindex))->ib_ptext; /* 34 = (sizeof(ICONBLK)-2) */
  46.     break; case R_BIPDATA:
  47.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nbb)
  48.             return ((BITBLK*)(rsc->rsh_bitblk + offset + sizeof(BITBLK)*re_gindex))->bi_pdata;
  49.  
  50.     // *I* think GEM stuffs these two up.  So I will too.
  51.     break; case R_FRSTR: // SHOULD be R_STRING, but GEM wrong, so me wrong.
  52.         // This is bogus.  Need to know semantics of R_FRSTR.
  53.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nstring)
  54.             return (char*)(rsc->rsh_string + offset + sizeof(void*)*re_gindex);
  55.     break; case R_STRING: // SHOULD be R_FRSTR, but GEM wrong, so me wrong.
  56.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nstring)
  57.             return ((char**)(rsc->rsh_frstr + offset))[re_gindex];
  58.     break; case R_FRIMG:
  59.         if (re_gindex >= 0 && re_gindex < rsc->rsh_nimages)
  60.             return ((char**)(rsc->rsh_frimg + offset))[re_gindex];
  61.     }
  62.  
  63.     return 0;
  64. }
  65.